package com.app.car.view;

import android.content.Context;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;

import androidx.recyclerview.widget.RecyclerView;

import my.LogUtil;

public class EmptyRecyclerView extends RecyclerView {

    private View emptyView;
    private static final String TAG = "EmptyRecyclerView";

    final private AdapterDataObserver observer = new AdapterDataObserver() {
        @Override
        public void onChanged() {
            checkIfEmpty();
        }

        @Override
        public void onItemRangeInserted(int positionStart, int itemCount) {
//            Log.i(TAG, "onItemRangeInserted" + itemCount);
            checkIfEmpty();
        }

        @Override
        public void onItemRangeRemoved(int positionStart, int itemCount) {
            checkIfEmpty();
        }
    };

    public EmptyRecyclerView(Context context) {
        super(context);
        initDefault();
    }

    public EmptyRecyclerView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initDefault();
    }

    public EmptyRecyclerView(Context context, AttributeSet attrs,
                             int defStyle) {
        super(context, attrs, defStyle);
        initDefault();
    }

    private void initDefault(){
//        emptyView = LayoutInflater.from(getContext()).inflate( R.layout.hr_recycleview_empty_view,null);
    }

    private void checkIfEmpty() {
        LogUtil.i(TAG, "checkIfEmpty---emptyView != null----" + (emptyView != null));
        if (emptyView != null && getAdapter() != null) {
            final boolean emptyViewVisible =
                    getAdapter().getItemCount() == 0;
            LogUtil.i(TAG, "checkIfEmpty---emptyViewVisible----" + (emptyViewVisible));
            emptyView.setVisibility(emptyViewVisible ? VISIBLE : GONE);
            setVisibility(emptyViewVisible ? GONE : VISIBLE);
        }
    }

    @Override
    public void setAdapter(Adapter adapter) {
        final Adapter oldAdapter = getAdapter();
        if (oldAdapter != null) {
            oldAdapter.unregisterAdapterDataObserver(observer);
        }
        super.setAdapter(adapter);
        if (adapter != null) {
            adapter.registerAdapterDataObserver(observer);
        }

        checkIfEmpty();
    }

    public void setEmptyView(View emptyView) {
        this.emptyView = emptyView;
        checkIfEmpty();
    }

    @Override
    public boolean requestChildRectangleOnScreen(View child, Rect rectangle, boolean immediate) {
//        LogUtil.i("requestChildRectangleOnScreen- recyleview-->"+child.getTop());
//        if(child.getTop() ==0){
//            return false;
//        }
//        return false;
//        if (child instanceof LinearLayout) {
//            LogUtil.i("requestChildRectangleOnScreen--child instanceof LinearLayout->");
//            return true;
//        }
        return super.requestChildRectangleOnScreen(child, rectangle, immediate);
    }


}